package cbm.commons;

import java.io.IOException;
import java.util.ResourceBundle;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import ejb.cbm.commons.StackTrace2String;
import ejb.cbm.seguridad.bean.RegistroIngresoBean;
import ejb.cbm.seguridad.local.RegistroIngresoFacadeLocal;

public class ConfirmacionIngresoFilter {
	
	private RegistroIngresoFacadeLocal registroIngresoFacadeLocal;
	
	private static ResourceBundle rb = ResourceBundle.getBundle("continuidadweb");

	public FilterConfig config;

    public ConfirmacionIngresoFilter() {
        
    }

	public void destroy() {
		
	} 

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		
		System.out.println("-----------FILTRO CONFIRMACION INGRESO---------------");
		
		ResultadoOperacionBean resultado = null;
		try{
			Context context = null;
			HttpServletRequest req = (HttpServletRequest)request;
			HttpSession session = req.getSession(false);
			String pagina = rb.getString("pagina_principal");
			SessionContainer sessionContainer = (SessionContainer)session.getAttribute(ConstantsWeb.SESSION_CONTAINER);
			RegistroIngresoBean registroIngreso = (RegistroIngresoBean)sessionContainer.getSessionElement(ConstantsWeb.REGISTRO_INGRESO);
			RegistroIngresoBean registroIngresoBD = null;
			resultado = new ResultadoOperacionBean(ResultadoOperacionBean.EXITO,ResultadoOperacionBean.TITULO_EXITO,ResultadoOperacionBean.MSGEXITO);

			//Se valida si el estado del registro de ingreso del usuario esta confirmado
			context = new InitialContext();
			registroIngresoFacadeLocal=(RegistroIngresoFacadeLocal)context.lookup("RegistroIngresoFacade/local");
			registroIngresoBD = registroIngresoFacadeLocal.obtenerRegistroIngresoById(registroIngreso.getNumeroregistro());
			
			if(registroIngresoBD.getFecha() == ConstantsWeb.SINCONFIRMAR){
				resultado.setResultado(ResultadoOperacionBean.ERROR);
				resultado.setTitulo(ResultadoOperacionBean.TITULO_ADVERTENCIA);
				resultado.setMensaje(rb.getString("usuario_no_confirmado"));
				
				pagina = pagina+"?"+ConstantsWeb.RPTA_AJAX_REQUEXT+"="+resultado.getAsArrayJS();
				
				sessionContainer.addTemporal(ConstantsWeb.RESULTADO_OPERACION, resultado);
				
				req.getRequestDispatcher(pagina).forward(request,response);
			}else{
				chain.doFilter(request, response);
			}
			
		}catch(IOException e){
			resultado.setResultado(ResultadoOperacionBean.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
			e.printStackTrace();
			throw e;
		}catch(ServletException e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
			e.printStackTrace();
			throw e;
		}catch(Exception e){
			resultado.setResultado(ConstantsWeb.ERROR);
			resultado.setTitulo(ResultadoOperacionBean.TITULO_ERROR);
			resultado.setMensaje(ResultadoOperacionBean.MSGERROR);
			resultado.setTrace(StackTrace2String.stackTraceToString(e));
			e.printStackTrace();
		}
		
	}

	public void init(FilterConfig fConfig) throws ServletException {
		this.config = fConfig;
	}
}
